﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Web.PuntoDeVenta.ServiceReferenceCrmLocalizationService;
using CrmContacto.Contracts.Contracts.Localization;
using Web.Framework.Translate;
using System.IO;

namespace Web.PuntoDeVenta.Code
{
    public class LocalizationHelper
    {
        public static void ReInitialize(string codigoLenguaje, bool force = false)
        {
            // Inicializo la aplicación
            LocalizationProvider.InitalizeInstance(codigoLenguaje);

            if (LocalizationProvider.Instance.GetTemrs(codigoLenguaje).Count == 0 || force)
            {
                LocalizationClient localizationClient = new LocalizationClient();
                Lenguaje lenguaje = localizationClient.ObtenerLenguajeById(codigoLenguaje);

                // Tengo que separar la parte de Javascript y la parte de aplicación
                Dictionary<string, string> termsForApp = new Dictionary<string, string>();
                Dictionary<string, string> termsForJs = new Dictionary<string, string>();

                foreach (PalabraClave pc in lenguaje.PalabraClaveList)
                {
                    if (pc.EsJavascript)
                    {
                        termsForJs.Add(pc.ClaveId, pc.Traduccion);
                    }
                    else
                    {
                        termsForApp.Add(pc.ClaveId, pc.Traduccion);
                    }
                }

                LocalizationProvider.Instance.SetTermsForLanguaje(codigoLenguaje, termsForApp);

                // Genero el archivo Javascript
                string path = HttpContext.Current.Server.MapPath("/Scripts/Localization");
                path = Path.Combine(path, string.Format("Localization.{0}.js", codigoLenguaje));

                if (File.Exists(path))
                {
                    File.Delete(path);
                }

                using (StreamWriter sw = new StreamWriter(File.Create(path)))
                {
                    foreach (var key in termsForJs.Keys)
                    {
                        sw.WriteLine("var {0} = '{1}';", key, termsForJs[key]);
                    }

                    sw.Close();
                }
            }
        }
    }
}